package com.eastfair.venueservice.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.eastfair.core.base.entity.Entity;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;
import com.eastfair.annotation.model.EchoVO;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 服务订单操作记录
 * </p>
 *
 * @author dqq
 * @since 2022-12-16
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("vsm_service_order_operate_log")
@ApiModel(value = "ServiceOrderOperateLog", description = "服务订单操作记录")
@AllArgsConstructor
public class ServiceOrderOperateLog extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 是否启用（确认状态）：1是 已确认；0否 未确认
     */
    @ApiModelProperty(value = "是否启用（确认状态）：1是 已确认；0否 未确认")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用（确认状态）：1是 已确认；0否 未确认")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 订单编号
     */
    @ApiModelProperty(value = "订单编号")
    @Size(max = 64, message = "订单编号长度不能超过64")
    @TableField(value = "order_number", condition = LIKE)
    @Excel(name = "订单编号")
    private String orderNumber;

    /**
     * 操作类型
     */
    @ApiModelProperty(value = "操作类型")
    @Size(max = 64, message = "操作类型长度不能超过64")
    @TableField(value = "operate_type", condition = LIKE)
    @Excel(name = "操作类型")
    private String operateType;

    /**
     * 操作内容
     */
    @ApiModelProperty(value = "操作内容")
    @Size(max = 200, message = "操作内容长度不能超过200")
    @TableField(value = "operate_content", condition = LIKE)
    @Excel(name = "操作内容")
    private String operateContent;

    /**
     * 原始操作结果
     */
    @ApiModelProperty(value = "原始操作结果")
    @Size(max = 2000, message = "原始操作结果长度不能超过2000")
    @TableField(value = "raw_operate_result", condition = LIKE)
    @Excel(name = "原始操作结果")
    private String rawOperateResult;

    /**
     * 操作人ID
     */
    @ApiModelProperty(value = "操作人ID")
    @TableField(value = "operate_id")
    @Excel(name = "操作人ID")
    private Long operateId;

    /**
     * 操作人姓名
     */
    @ApiModelProperty(value = "操作人姓名")
    @Size(max = 100, message = "操作人姓名长度不能超过100")
    @TableField(value = "operate_name", condition = LIKE)
    @Excel(name = "操作人姓名")
    private String operateName;

    /**
     * 操作时间
     */
    @ApiModelProperty(value = "操作时间")
    @TableField(value = "operate_time")
    @Excel(name = "操作时间", format = DEFAULT_DATE_TIME_FORMAT, width = 20)
    private LocalDateTime operateTime;

    /**
     * 备注信息
     */
    @ApiModelProperty(value = "备注信息")
    @Size(max = 500, message = "备注信息长度不能超过500")
    @TableField(value = "remark", condition = LIKE)
    @Excel(name = "备注信息")
    private String remark;


    @Builder
    public ServiceOrderOperateLog(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, Long tenantId, 
                    String orderNumber, String operateType, String operateContent, String rawOperateResult, Long operateId, String operateName, 
                    LocalDateTime operateTime, String remark) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.orderNumber = orderNumber;
        this.operateType = operateType;
        this.operateContent = operateContent;
        this.rawOperateResult = rawOperateResult;
        this.operateId = operateId;
        this.operateName = operateName;
        this.operateTime = operateTime;
        this.remark = remark;
    }

}
